#ifndef _ALGO_PID_H
#define _ALGO_PID_H

#include "algorithm_conf.h"

//PID参数结构体
//u(k) = Kp*e(k) + Ki*∑e + Kd*Δe(k) , 式中Δe(k)=e(k)-e(k-1)
typedef struct _algo_pid_t
{
	f32 kp;		// 比例项系数
	f32 ki;		// 积分项系数
	f32 kd;		// 微分项系数
	
	f32 error;
	f32 last_error;
	f32 delta_error;
	f32 sum_error;
	f32 sum_error_temp[10];
	uint8 sum_err_ptr;
	
	f32 out_limit;	// 输出限制
} algo_pid_t;

void algo_pid_init(algo_pid_t *pid, f32 kp, f32 ki, f32 kd, f32 out_limit); // PID参数初始化
f32 algo_pid_calc(algo_pid_t *pid, f32 expc_value, f32 cur_value); // PID输出计算

#endif
